package ioc15;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

/**
 * Author:shixiaojun@itany.com
 * Date:2022/5/17 13:35
 * Version:1.0-SNAPSHOT
 * Description:
 */
public class SomeBeanPostProcessor implements BeanPostProcessor {

    /**
     * 在初始化之前做后处理
     * @param bean      当前正在处理的bean是哪一个
     * @param beanName  当前正在处理的bean的id属性值是多少
     * @return
     * @throws BeansException
     */
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
//        return bean;
        // 由于后处理bean会对容器中所有的bean进行处理
        // 因此,在做处理的时候,需要判断当前正在处理的bean是谁
        // 根据处理的bean是谁考虑是否要做处理
        // 对所有的SomeBean的name属性的值改为首字母大写
        // 判断是否是SomeBean
        // 该方式可以判断是否是对应的类
        // 可能存在无数个满足情况的bean
        if(bean instanceof SomeBean){
            SomeBean someBean = (SomeBean) bean;
            someBean.setName(someBean.getName().substring(0,1).toUpperCase()+someBean.getName().substring(1));
        }
        // 判断bean的id是否是otherBean
        // 由于bean的id属性值具有唯一性
        // 该方式可以满足条件的最多只有一个
//        if("otherBean".equals(beanName)){
//            OtherBean otherBean = (OtherBean) bean;
//            otherBean.setName(otherBean.getName().toUpperCase());
//        }
        if(bean instanceof OtherBean){
            OtherBean otherBean = (OtherBean) bean;
            otherBean.setName(otherBean.getName().toUpperCase());
        }
        return bean;
    }

    /**
     * 在初始化之后做后处理
     * @param bean
     * @param beanName
     * @return
     * @throws BeansException
     */
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }
}
